#ifndef SCOPETEMPLATE_H
#define SCOPETEMPLATE_H

#include <QObject>
#include <QList>
#include <QString>
#include <QtDebug>

//#include "fraction.h"
#include "variable.h"

class ScopeTemplate
{
private:
	QList<Variable> _vars; // lista zmiennych 
	qint32 _id;

public:
	ScopeTemplate(){};
	ScopeTemplate(qint32 id): _id(id){};
	~ScopeTemplate(){};

	bool addVariable(VariableType type, QString id, QString value = QObject::tr("") )
	{
		if(!exists(id))
		{
			_vars.append(Variable(type, id, value));
			return true;
		}
		return false;
	}

	QList<Variable> vars(){return _vars;}

	bool exists(QString id)
	{		
		for(int i = 0; i < _vars.size(); ++i)
		{
			if(_vars[i].id() == id)
			{
				return true;
			}
		}
		return false;
	}

	void assign(QString id, QString value)
	{
		for(int i = 0; i < _vars.size(); ++i)
		{
			if(_vars[i].id() == id)
			{
				_vars[i].setValue(value);
				return;
			}
		}
	}

	void assign(qint32 i, QString value)
	{
		_vars[i].setValue(value);
	}

	Value value(QString id)
	{
		for(int i = 0; i < _vars.size(); ++i)
		{
			if(_vars[i].id() == id)
			{
				return _vars[i].value();
			}
		}
		return Value();
	}
	
	VariableType retType() { return _vars[0].value().type(); } 

	Value retValue() { return _vars[0].value(); }

	void setRetValue(Value v)
	{
		_vars[0].setValue(v.toString());
	}

	VariableType typeOf(QString id)
	{
		for(int i = 0; i < _vars.size(); ++i)
		{
			if(_vars[i].id() == id)
			{
				Variable rerere = _vars[i];
				return _vars[i].value().type();
			}
		}
		return HaveNoIdeaType;
	}

};


#endif // SCOPETEMPLATE_H